/**
 * ReportGear(2011)
 */
package com.reportgear.core.data.model;

import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.reportgear.core.data.SalaryHelper;
import com.reportgear.report.model.ReportModel;
import com.reportgear.report.model.SalaryReportModel;
import com.reportgear.report.model.cell.Cell;
import com.reportgear.report.model.cell.value.salary.SalaryFormulaObject;
import com.reportgear.report.model.cell.value.salary.SalaryItemObject;
import com.reportgear.report.model.cell.value.salary.SalaryMainObject;
import com.reportgear.report.model.cell.value.support.CorssDataValueObject;
import com.sot.core.util.NumberUtils;
import com.sot.core.util.StringUtils;

/**
 * 
 * 四川省电信薪酬数据模型<br/>
 * 先出报表，以后升级<br/>
 * 当前所有报表都是以XML方式提供
 * 
 * @version 1.0 2011-4-11
 * @author <a herf="lexloo@gmail.com">lexloo</a>
 * @since Report 1.0
 */
public class SalaryDataModel implements DataModel {
	public static String DM_1;

	// // 判断正则表达式中的数字
	// private static final Pattern PAT_TEST_NUMBER = Pattern.compile("(\\d+)");
	// private boolean opened = false;
	// 报表模型，使用报表模型计算请求数据对象
	private ReportModel reportModel;
	//
	// @Override
	// public List<SalaryObject> getData() {
	// if (logger.isDebugEnabled()) {
	// logger.debug("获取模型数据，Id：" + this.getId());
	// }
	//
	// if (this.reportModel == null) {
	// logger.warn("没有设置报表模型，不能计算");
	// return Collections.emptyList();
	// } else {
	// return SalaryHelper.INSTANCE.loadSalaryData(this.genQueryXml());
	// }
	// }
	//
	// /**
	// * 生成查询XML
	// *
	// * @return 查询XMl
	// */
	// private String genQueryXml() {
	// Set<Integer> objectIDs = this.getObjectIDs();
	// Set<Integer> itemIDs = this.getItemIDs();
	//
	// StringBuilder sb = new StringBuilder("<Root>");
	//
	// String beginDate = (String) reportModel.getParameter("beginDate");
	// String endDate = (String) reportModel.getParameter("endDate");
	//
	// sb.append("<Header QueryType=\"").append(((SalaryReportModel)
	// this.reportModel).getObject()).append(
	// "\" beginDate=\"").append(beginDate).append("\" endDate=\"").append(endDate).append("\"/>");
	// // 薪酬项目
	// sb.append("<Cols>");
	// for (Integer item : itemIDs) {
	// sb.append("<Col id=\"").append(item).append("\"/>");
	// }
	// sb.append("</Cols>");
	//
	// // 薪酬对象
	// sb.append("<Rows>");
	// for (Integer objId : objectIDs) {
	// sb.append("<Row id=\"").append(objId).append("\"/>");
	// }
	// sb.append("</Rows>");
	// sb.append("</Root>");
	//
	// return sb.toString();
	// }
	//
	// /**
	// * @return 所有对象Id
	// */
	// private Set<Integer> getObjectIDs() {
	// Set<Integer> result = new HashSet<Integer>();
	// Iterator<Cell> cells =
	// this.reportModel.getCellsIteratorByCellElementClass(SalaryMainObject.class);
	// for (Iterator<Cell> i = cells; i.hasNext();) {
	// Cell cell = i.next();
	//
	// SalaryMainObject value = (SalaryMainObject) cell.getValue();
	//
	// result.add(value.getObject().getId());
	// }
	//
	// return result;
	// }
	//
	// /**
	// * @return 所有项目Id
	// */
	// private Set<Integer> getItemIDs() {
	// Set<Integer> result = new HashSet<Integer>();
	//
	// // 查询薪酬项目
	// Iterator<Cell> itemCells =
	// this.reportModel.getCellsIteratorByCellElementClass(SalaryItemObject.class);
	// for (Iterator<Cell> i = itemCells; i.hasNext();) {
	// Cell cell = i.next();
	//
	// SalaryItemObject value = (SalaryItemObject) cell.getValue();
	//
	// result.add(value.getItem().getId());
	// }
	//
	// // 查询薪酬计算项目
	// Iterator<Cell> formulaCells =
	// this.reportModel.getCellsIteratorByCellElementClass(SalaryFormulaObject.class);
	// for (Iterator<Cell> i = formulaCells; i.hasNext();) {
	// Cell cell = i.next();
	//
	// SalaryFormulaObject value = (SalaryFormulaObject) cell.getValue();
	//
	// String formula = value.getFormula();
	//
	// if (!StringUtils.isEmpty(formula)) {
	// Matcher m = PAT_TEST_NUMBER.matcher(formula);
	// while (m.find()) {
	// result.add(NumberUtils.convertToInteger(m.group(1), 0));
	// }
	// }
	// }
	//
	// return result;
	// }
	//
	/**
	 * 设置报表模型
	 * 
	 * @param model
	 *            报表模型
	 */
	public void setReportModel(ReportModel model) {
		this.reportModel = model;
	}

	@Override
	public String getId() {
		return SalaryDataModel.DM_1;
	}

	// @Override
	// public boolean isOpen() {
	// return this.opened;
	// }
}
